package cn.dglydrpy.study.algorithm.od;

import java.util.*;

/**
 * @author Yyy
 * @date 2024/11/7 18:56
 * @description 寿司店周年庆活动，寿司转盘上有 n 盘寿司，若客户选择第 i 盘寿司，且存在价格小于它的下一盘寿司 j，
 * 则免费送 j 盘寿司，否则不送。输出享受优惠后的一组数据，即客户选择每盘寿司时实际得到的总价格。
 * 
 输入：
 3 15 6 14
 输出：
 3 21 6 17

输入：
3 14 15 6 5
输出：
3 20 21 11 8
 */
public class Od0020_Zhuanpan {

    public static void main(String[] args) {

//        Scanner scanner = new Scanner(System.in);
//        while(scanner.hasNextLine()){
//            String[] s = scanner.nextLine().split(" ");
//            int[] arr = new int[s.length];
//            for(int i=0;i<arr.length;i++){
//                arr[i] = Integer.valueOf(s[i]);
//            }
//            
//            String ans = myAnswer(arr);
//            System.out.println(ans);
//
//            String answer1 = answer1(arr);
//            System.out.println(answer1);
//        }

        // 对数器验证
        int testTime = 50000;
        boolean succeed = true;

        for (int i = 0; i < testTime; i++) {
            int[] arr = genArray();
            String answer1 = answer1(arr);
            String myAnswer = myAnswer(arr);
            if(!answer1.equals(myAnswer)){
                succeed = false;
                Arrays.stream(arr).forEach(System.out::println);
                System.out.println(answer1);
                System.out.println(myAnswer);
                break;
            }
        }
        System.out.println(succeed ? "Nice!" : "Fucking fucked!");
    }

    private static int[] genArray() {
        
        int[] arr = new int[(int) (Math.random()*500) + 1];
        for(int i = 0;i<arr.length;i++){
            arr[i] = (int) (Math.random()*1000) + 1;
        }
    
        return arr;
    }

    private static String answer1(int[] arr) {
        
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
            boolean isFind = false;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[i]) {
                    result.append(arr[i] + arr[j]);
                    result.append(" ");
                    isFind = true;
                    break;
                }
            }
            if (!isFind) {
                for (int j = 0; j < i; j++) {
                    if (arr[j] < arr[i]) {
                        result.append(arr[i] + arr[j]);
                        result.append(" ");
                        isFind = true;
                        break;
                    }
                }
            }
            if (!isFind) {
                result.append(arr[i]);
                result.append(" ");
            }
        }
        return result.toString().trim();
    }

    private static String myAnswer(int[] arr) {
        if(arr == null || arr.length == 0){
            return "";
        }
        
        StringBuilder ans = new StringBuilder();
        for(int i = 0;i<arr.length;i++){

            // 找后面比当前值离得最近的
            int m = -1;
            for(int j=i+1;j<arr.length;j++){
                if(arr[j] < arr[i]){
                    m = j;
                    break;
                }
            }
            
            if(m == -1){
                // 找前面离得最远且小的
                for(int j=0;j<i;j++){
                    if(arr[j] < arr[i]){
                        m = j;
                        break;
                    }
                }
            }
            

            ans.append(m == -1 ? arr[i] : arr[i]+arr[m]).append(" ");
        }
        return ans.toString().trim();
    }
    
    
}
